import tkinter as tk
import mysql.connector

# 定义一个函数，用于执行数据库查询操作
def query_database():
    # 获取查询输入框中的查询语句，从第一行第一个字符到文本末尾，去除首尾空白字符
    query = query_entry.get("1.0", tk.END).strip()
    if query:
        try:
            # 连接到MySQL数据库，指定主机、用户名、密码和数据库名
            mydb = mysql.connector.connect(
                host="localhost",
                user="root",
                password="1234Qwer",
                database="hmdb"
            )
            mycursor = mydb.cursor()

            # 执行查询语句
            mycursor.execute(query)
            # 获取查询结果，返回所有匹配的行
            results = mycursor.fetchall()

            # 清空结果显示文本框中的内容
            result_text.delete("1.0", tk.END)
            for row in results:
                # 将每行结果转换为字符串并插入到结果显示文本框中，每行后添加换行符
                result_text.insert(tk.END, str(row) + "\n")

            # 提交事务（对于查询操作，这一步不是必需的，但为了代码完整性包含在这里）
            mydb.commit()
        except mysql.connector.Error as err:
            # 如果查询过程中出现错误，清空结果显示文本框
            result_text.delete("1.0", tk.END)
            # 在结果显示文本框中插入错误信息
            result_text.insert(tk.END, f"查询失败: {err}")
        finally:
            # 关闭数据库连接
            mydb.close()
    else:
        # 如果查询语句为空，清空结果显示文本框
        result_text.delete("1.0", tk.END)
        # 在结果显示文本框中提示用户输入查询语句
        result_text.insert(tk.END, "请输入查询语句。")

# 创建主窗口
root = tk.Tk()
# 设置主窗口标题
root.title("数据库查询界面")

# 查询语句输入框相关组件
# 创建一个标签，显示提示文本
query_label = tk.Label(root, text="请输入查询语句:")
# 将标签添加到主窗口
query_label.pack()
# 创建一个文本框，用于输入查询语句，高度为5行
query_entry = tk.Text(root, height=5)
# 将文本框添加到主窗口
query_entry.pack()

# 执行查询按钮相关组件
# 创建一个按钮，文本为"执行查询"，点击时调用query_database函数
query_button = tk.Button(root, text="执行查询", command=query_database)
# 将按钮添加到主窗口
query_button.pack()

# 结果显示区域相关组件
# 创建一个文本框，用于显示查询结果
result_text = tk.Text(root)
# 将文本框添加到主窗口
result_text.pack()

# 启动主窗口的事件循环，持续监听用户操作
root.mainloop()